package org.infodavid.common.model;

import org.joda.time.DateTime;

/**
 * The Interface IPerson.
 */
public interface IPerson extends IEntity {

  /**
   * The Enum PERSON_TITLE.
   */
  enum EPersonTitle {
    /** The MME. */
    MME,

    /** The MISS. */
    MISS,

    /** The MS. */
    MS,

    /** The MRS. */
    MRS,

    /** The MR. */
    MR,

    /** The MSS. */
    MSS,

    /** The SIR. */
    SIR,

    /** The LADY. */
    LADY,

    /** The UNDEFINED. */
    UNDEFINED
  }

  /** The constant LOCAL_BEAN_JNDI_NAME. */
  String LOCAL_BEAN_JNDI_NAME = "IPerson/local";

  /** The BIRT h_ date. */
  String BIRTH_DATE = "birthDate";

  /** The DEAT h_ date. */
  String DEATH_DATE = "deathDate";

  /** The FIRST_NAME. */
  String FIRST_NAME = "firstName";

  /** The ID. */
  String ID = "personKey";

  /** The constant MAX_LENGTH_FIRST_NAME. */
  int MAX_LENGTH_FIRST_NAME = 64;

  /** The constant MAX_LENGTH_BUSINESS_TYPE. */
  int MAX_LENGTH_NATIONALITY = 3;

  /** The NATIONALITY. */
  String NATIONALITY = "nationality";

  /** The PERSON. */
  String PERSON = "person";

  /** The TITLE. */
  String TITLE = "title";

  /**
   * Gets the age.
   * @return the age
   */
  byte getAge();

  /**
   * Gets the birth date.
   * @return the birth date
   */
  DateTime getBirthDate();

  /**
   * Gets the death date.
   * @return the death date
   */
  DateTime getDeathDate();

  /**
   * Sets the birth date.
   * @param value the date
   */
  void setBirthDate(DateTime value);

  /**
   * Sets the death date.
   * @param value the date
   */
  void setDeathDate(DateTime value);

  /**
   * Gets the first name.
   * @return the first name
   */
  String getFirstName();

  /**
   * Gets the nationality.
   * @return the nationality
   */
  String getNationality();

  /**
   * Gets the title.
   * @return the title
   */
  EPersonTitle getTitle();

  /**
   * Sets the first name.
   * @param value the value
   */
  void setFirstName(String value);

  /**
   * Sets the nationality.
   * @param value the value
   */
  void setNationality(String value);

  /**
   * Sets the title.
   * @param value the value
   */
  void setTitle(EPersonTitle value);
}
